#!/bin/bash

# 检查是否以root用户运行脚本
if [ "$(id -u)" != "0" ]; then
    echo "此脚本需要以root用户权限运行。"
    echo "请尝试使用 'sudo -i' 命令切换到root用户，然后再次运行此脚本。"
    exit 1
fi

function install_node() {
    # 读取加载身份码信息
    read -p "输入你的身份码: " id

    # 提供默认配置选项
    read -p "是否使用默认配置安装？(y/n): " use_default_config

    if [[ "$use_default_config" == "y" || "$use_default_config" == "Y" ]]; then
        # 默认配置
        container_count=5
        start_rpc_port=30000
        storage_gb=2
        custom_storage_path=""
        echo "节点数量: $container_count"
        echo "起始 RPC 端口: $start_rpc_port"
        echo "每个节点的存储空间大小 (GB): $storage_gb"
        echo "节点存储数据的宿主机路径: ${custom_storage_path:-默认路径}"

    else
        # 让用户输入想要创建的容器数量
            read -p "请输入你想要创建的节点数量，单IP限制最多5个节点: " container_count
            if ! [[ "$container_count" =~ ^[1-5]$ ]]; then
                echo "节点数量必须在1到5之间。"
                exit 1
            fi

            # 让用户输入起始 RPC 端口号
            read -p "请输入你想要设置的起始 RPC端口 （端口号请自行设定，开启5个节点端口将会依次数字顺延，建议输入30000即可）: " start_rpc_port
            if ! [[ "$start_rpc_port" =~ ^[0-9]+$ ]]; then
                echo "起始 RPC 端口必须是数字。"
                exit 1
            fi

            # 让用户输入想要分配的空间大小
            read -p "请输入你想要分配每个节点的存储空间大小（GB），单个上限2T, 网页生效较慢，等待20分钟后，网页查询即可: " storage_gb
            if ! [[ "$storage_gb" =~ ^[1-2048]$ ]]; then
                echo "存储空间大小必须在1到2048之间。"
                exit 1
            fi

        # 让用户输入存储路径（可选）
        read -p "请输入节点存储数据的宿主机路径（直接回车将使用默认路径 titan_storage_$i,依次数字顺延）: " custom_storage_path
    fi
    apt update

    # 检查 Docker 是否已安装
    if ! command -v docker &> /dev/null
    then
        echo "未检测到 Docker，正在安装..."
        apt-get install ca-certificates curl gnupg lsb-release -y
        
        # 安装 Docker 最新版本
        apt-get install docker.io -y
    else
        echo "Docker 已安装。"
    fi

    # 拉取Docker镜像
    if ! docker pull nezha123/titan-edge:1.7; then
        echo "拉取镜像失败，退出脚本"
        exit 1
    fi

    # 创建用户指定数量的容器
    for ((i=1; i<=container_count; i++))
    do
        current_rpc_port=$((start_rpc_port + i - 1))

        # 判断用户是否输入了自定义存储路径
        if [ -z "$custom_storage_path" ]; then
            # 用户未输入，使用默认路径
            storage_path="$PWD/titan_storage_$i"
        else
            # 用户输入了自定义路径，使用用户提供的路径
            storage_path="$custom_storage_path"
        fi

        # 确保存储路径存在
        mkdir -p "$storage_path"

        # 运行容器，并设置重启策略为always
        container_id=$(docker run -d --restart always -v "$storage_path:/root/.titanedge/storage" --name "titan$i" --net=host  nezha123/titan-edge:1.7)

        echo "节点 titan$i 已经启动 容器ID $container_id"

        sleep 30

        # 修改宿主机上的config.toml文件以设置StorageGB值和端口
        docker exec $container_id bash -c "\
            sed -i 's/^[[:space:]]*#StorageGB = .*/StorageGB = $storage_gb/' /root/.titanedge/config.toml && \
            sed -i 's/^[[:space:]]*#ListenAddress = \"0.0.0.0:1234\"/ListenAddress = \"0.0.0.0:$current_rpc_port\"/' /root/.titanedge/config.toml && \
            echo '容器 titan'$i' 的存储空间设置为 $storage_gb GB，RPC 端口设置为 $current_rpc_port'"

        # 重启容器以让设置生效
        docker restart $container_id

        # 进入容器并执行绑定命令
        docker exec $container_id bash -c "\
            titan-edge bind --hash=$id https://api-test1.container1.titannet.io/api/v2/device/binding"
        echo "节点 titan$i 已绑定."

    done

    echo "==============================所有节点均已设置并启动==================================="
}

# 卸载节点功能
function uninstall_node() {
    echo "你确定要卸载Titan 节点程序吗？这将会删除所有相关的数据。[Y/N]"
    read -r -p "请确认: " response

    case "$response" in
        [yY][eE][sS]|[yY]) 
            echo "开始卸载节点程序..."
            for i in {1..5}; do
                sudo docker stop "titan$i" && sudo docker rm "titan$i"
            done
            for i in {1..5}; do 
                rmName="storage_titan_$i"
                rm -rf "$rmName"
            done
            echo "节点程序卸载完成。"
            ;;
        *)
            echo "取消卸载操作。"
            ;;
    esac
}


# 主菜单
function main_menu() {
    while true; do
        clear
        echo "脚本以及教程由推特用户大赌哥 @y95277777 编写，免费开源，请勿相信收费"
        echo "================================================================"
        echo "节点社区 Telegram 群组:https://t.me/niuwuriji"
        echo "节点社区 Telegram 频道:https://t.me/niuwuriji"
        echo "节点社区 Discord 社群:https://discord.gg/GbMV5EcNWF"
        echo "退出脚本，请按键盘ctrl c退出即可"
        echo "请选择要执行的操作:"
        echo "1. 安装节点"
        echo "2. 卸载节点"
        read -p "请输入选项（1-2）: " OPTION

        case $OPTION in
        1) install_node ;;
        2) uninstall_node ;;
        *) echo "无效选项。" ;;
        esac
        echo "按任意键返回主菜单..."
        read -n 1
    done
    
}

# 显示主菜单
main_menu